//
// Created by Tan Ke on 2024/2/16.
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>


char* intToRoman(int num)
{
    int gewei = 0;
    int shiwei = 0;
    int baiwei = 0;
    int qianwei = 0;
    char geweiStr[10] = {0};
    char shiweiStr[10] = {0};
    char baiweiStr[10] = {0};
    char qianweiStr[10] = {0};

    char* result = (char*)malloc(sizeof(char) * 40);

    memset(geweiStr, 0, 10);
    memset(shiweiStr, 0, 10);
    memset(baiweiStr, 0, 10);
    memset(qianweiStr, 0, 10);
    memset(result, 0, 40);

    gewei = num % 10;
    if (gewei > 0) {
        if (gewei == 1) {
            memcpy(geweiStr, "I", 1);
        } else if (gewei == 2) {
            memcpy(geweiStr, "II", 2);
        } else if (gewei == 3) {
            memcpy(geweiStr, "III", 3);
        } else if (gewei == 4) {
            memcpy(geweiStr, "IV", 2);
        } else if (gewei == 5) {
            memcpy(geweiStr, "V", 1);
        } else if (gewei == 6) {
            memcpy(geweiStr, "VI", 2);
        } else if (gewei == 7) {
            memcpy(geweiStr, "VII", 3);
        } else if (gewei == 8) {
            memcpy(geweiStr, "VIII", 4);
        } else {
            memcpy(geweiStr, "IX", 2);
        }
    }
    num = num / 10;

    shiwei = num % 10;
    if (shiwei > 0) {
        if (shiwei == 1) {
            memcpy(shiweiStr, "X", 1);
        } else if (shiwei == 2) {
            memcpy(shiweiStr, "XX", 2);
        } else if (shiwei == 3) {
            memcpy(shiweiStr, "XXX", 3);
        } else if (shiwei == 4) {
            memcpy(shiweiStr, "XL", 2);
        } else if (shiwei == 5) {
            memcpy(shiweiStr, "L", 1);
        } else if (shiwei == 6) {
            memcpy(shiweiStr, "LX", 2);
        } else if (shiwei == 7) {
            memcpy(shiweiStr, "LXX", 3);
        } else if (shiwei == 8) {
            memcpy(shiweiStr, "LXXX", 4);
        } else {
            memcpy(shiweiStr, "XC", 2);
        }
    }
    num = num / 10;

    baiwei = num % 10;
    if (baiwei > 0) {
        if (baiwei == 1) {
            memcpy(baiweiStr, "C", 1);
        } else if (baiwei == 2) {
            memcpy(baiweiStr, "CC", 2);
        } else if (baiwei == 3) {
            memcpy(baiweiStr, "CCC", 3);
        } else if (baiwei == 4) {
            memcpy(baiweiStr, "CD", 2);
        } else if (baiwei == 5) {
            memcpy(baiweiStr, "D", 1);
        } else if (baiwei == 6) {
            memcpy(baiweiStr, "DC", 2);
        } else if (baiwei == 7) {
            memcpy(baiweiStr, "DCC", 3);
        } else if (baiwei == 8) {
            memcpy(baiweiStr, "DCCC", 4);
        } else {
            memcpy(baiweiStr, "CM", 2);
        }
    }
    num = num / 10;

    qianwei = num % 10;
    if (qianwei > 0) {
        if (qianwei == 1) {
            memcpy(qianweiStr, "M", 1);
        } else if (qianwei == 2) {
            memcpy(qianweiStr, "MM", 2);
        } else {
            memcpy(qianweiStr, "MMM", 3);
        }
    }

    if (strlen(qianweiStr) > 0) {
        memcpy(result, qianweiStr, strlen(qianweiStr));
    }
    if (strlen(baiweiStr) > 0) {
        memcpy(result + strlen(result), baiweiStr, strlen(baiweiStr));
    }
    if (strlen(shiweiStr) > 0) {
        memcpy(result + strlen(result), shiweiStr, strlen(shiweiStr));
    }
    if (strlen(geweiStr) > 0) {
        memcpy(result + strlen(result), geweiStr, strlen(geweiStr));
    }

    return result;
}


int main(void)
{
    printf("%s\n", intToRoman(3));
    printf("%s\n", intToRoman(4));
    printf("%s\n", intToRoman(9));

    printf("%s\n", intToRoman(58));
    printf("%s\n", intToRoman(1994));

    return 0;
}